package com.zf.canal.utils;

import com.zf.canal.handler.RowDataHandler;

import java.util.concurrent.ConcurrentHashMap;

/**
 * 操作 表和数据处理器
 * @author Zhou Feng
 */
public class TableHelper {
    /**
     * 表名 对应的 实体类和数据处理器
     */
    public static ConcurrentHashMap<String, TableInfo> TABLE_INFO_CACHE = new ConcurrentHashMap<>();


    /**
     * 添加 名 对应的 实体类和数据处理器
     */
    public static void addTableInfo(TableInfo tableInfo) {
        TABLE_INFO_CACHE.put(tableInfo.getTableName(), tableInfo);
    }


    /**
     * 根据表名获取对应数据处理器
     * @param tableName 表名
     * @return 数据处理器
     */
    public static RowDataHandler getTableHandler(String tableName){
        TableInfo tableInfo = TABLE_INFO_CACHE.get(tableName);
        if (tableInfo == null){
            throw new RuntimeException(String.format("没有找到 %s 表对应的 RowDataHandler，请实现对应的RowDataHandler", tableName));
        }
        return tableInfo.getHandler();
    }

    /**
     * 根据表名获取对应的实体类型
     * @param tableName 表名
     * @return 实体类型
     */
    public static Class<?> getTableEntityClass(String tableName){
        TableInfo tableInfo = TABLE_INFO_CACHE.get(tableName);
        if (tableInfo == null){
            throw new RuntimeException(String.format("没有找到 %s 表对应的实体类，请编写对应的实体类", tableName));
        }
        return tableInfo.getEntityClass();
    }
}
